OpenCL (Open Computing Language) is a framework for writing programs that execute across a heterogeneous platform that has central processing units (CPUs), graphics processing units (GPUs), and other processors. OpenCL consists of a programming language that is based on a subset of C99 standard and a number of extensions that is both used to communicate between various devices and write data-parallel computational kernels for these devices. One of the key limitation of OpenCL is that it does not allow sharing of complex data structures between multiple heterogeneous devices in a seamless manner.
Typically, a GPU's memory is divided into a set of regions or areas. These regions are referenced by a binding table and an offset. In such a design, translating a CPU pointer to a GPU pointer requires decoding the offset and also the binding table because there exists more than one binding table.